package com.wang.interview.tests.innerclass;

/**
 * @author: wang
 * @date: 2021/8/5 16:09
 * @description:
 */
public class In1 {

    private int num = 10;


    public class A{
        public void pA(){
            num++;
            System.out.println(num);  // 内部类可以直接访问外部内的所有，编译时会创建一个内部类和对应依赖外部类的参数副本
        }
    }
    public static class B{
        public void pri(){
            System.out.println("静态内部类 能在外部类内 被实例化，通过外部类名.内部类名调用 ");
        }

        public static void pri2(){
            System.out.println("静态内部类 不能在外部类之外 被实例化，通过外部类名.内部类名调用");
        }
    }
    private class C{
        public void pp(){
            System.out.println(123);
        }
    }

    public C getC(){
        return new C();
    }

    public static void main(String[] args) {
        B b = new B();
        b.pri();                // 静态内部类 能在外部类内 被实例化，通过外部类名.内部类名调用

        //A a = new A();          // 普通内部类，不能在外部类的main方法中直接new，new 内部类就相当于是直接访问外部类的成员变量，main 是 static 修饰的
        In1 in1 = new In1();
        A a = in1.new A();
        a.pA();
        in1.num++;
        a.pA();
    }

}
class D{
    public static void main(String[] args) {
        In1.A a = new In1().new A();
        In1.B.pri2();           // 静态内部类 不能在外部类之外 被实例化，通过外部类名.内部类名调用
        //new In1().new C();    // 私有的内部类不能在外部类外被访问
        //In1.C c = new In1().getC();// 通过方法获取也不行，也调不了方法，整个类完全私有

    }
}